# 作者: Mark
# 2023年03月07日22时55分44秒

from socket import *
import select
import sys

if len(sys.argv) != 2:
    print('argv erorr')
    exit(-1)

#1 初始化一个套接字
tcp_client_socket = socket(AF_INET,SOCK_STREAM)

#2 连接服务器，连接不上要报错
addr = (sys.argv[1],2000)
tcp_client_socket.connect(addr)

#创建一个epoll对象
linux_epoll = select.epoll()
#先使用epoll帮助监听标准输入的数据 在input的缓冲区
#此缓冲区在内核的进程地址空间中
#fileno()是表示在在内核地址中的标准输入的数据的文件描述符的接口
#sys.stdin.fileno()文件描述符
#select.EPOLLIN 可读事件
linux_epoll.register(sys.stdin.fileno(),select.EPOLLIN)
#在使用eppll帮我们监听来自client_socket的数据  在recv的缓冲区
#client_socket.fileno()文件描述符
linux_epoll.register(tcp_client_socket.fileno(),select.EPOLLIN)


while True:
    events = linux_epoll.poll(-1,2)
    for event in events:
        if event[0]==tcp_client_socket.fileno():
            recv_data = tcp_client_socket.recv(1000)    #这里会堵塞
            if recv_data:

                print(recv_data.decode("utf8"))
            else:  # 如果没有从缓冲区读到数据，就是对端断开了
                print("拜拜！")
                tcp_client_socket.close()
                exit(0)
        elif event[0] ==sys.stdin.fileno():

            input_data= input()  #这里会堵塞
            tcp_client_socket.send(input_data.encode('utf8'))